MySQL: IFNULL рдЕрд▓рдЧ рд╕рдВрдХрд▓рди рдХреЗ рд╕рд╛рде рдорд┐рддреНрд░ рдирд╣реАрдВ рд╣реИ?

рдЖрдЬ рдореИрдВрдиреЗ IFNULL рдХреА рдПрдХ рдЕрдЬреАрдм рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдЬрдм рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (рдЪрд╛рд░рд╕реЗрдЯ) рдФрд░ рд╡рд┐рднрд┐рдиреНрди рддреБрд▓рдирд╛ (рдЯрдХрд░рд╛рд╡) рд╣реЛрддреЗ рд╣реИрдВред



рдЗрд╕рд▓рд┐рдП рд╣рдо рдереЛрдбрд╝рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:

CREATE TABLE `test` ( `name1` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL , `name2` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC;
      
      





рдирд┐рд╡реЗрджрди рднреЗрдЬрдирд╛

 SELECT IFNULL(name1, name2) FROM test;
      
      





рдФрд░ рдЬрд╡рд╛рдм рдореЗрдВ:

 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'ifnull'
      
      





рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ - рддреБрд▓рдирд╛ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдЖ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ IFNULL рдХрдерди рдХреЛ рддреБрд▓рдирд╛ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред



рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдШреВрдордиреЗ рд▓рдЧреЗ, рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдорди рдореЗрдВ рдЖрдИ

 SELECT IFNULL(name1 COLLATE utf8_general_ci, name2) FROM test;
      
      





рдЕрдиреБрд░реЛрдз рдиреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм 5-10ms рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдпрди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рддреБрд▓рдиреАрдп рд╣реИ (~ 6-8ms, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ)ред рдХреНрдпреЛрдВрдХрд┐ рдЖрдзрд╛рд░ рдкрд░ рд▓реЛрдб рдмрдбрд╝рд╛ рд╣реИ, рдФрд░ рдореБрдЦреНрдп рдЕрдиреБрд░реЛрдз, рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред



рдореИрдВ рдЖрдЧреЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВред тАЬрдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рддреЛ? рдирд╣реАрдВ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ... рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░? рдореИрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рдЧрдВрд╡рд╛рддрд╛, рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ "

 SELECT IF(name1 IS NOT NULL, name1, name2) FROM test;
      
      





рдЬрдм рдЕрдиреБрд░реЛрдз рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рддреЛ рдореЗрд░рд╛ рдЖрд╢реНрдЪрд░реНрдп рдХреНрдпрд╛ рдерд╛ред

тАЬрдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рд╢рд╛рдпрдж рдХрд╣реАрдВ рдЧрд▓рдд рд╣реВрдБ ... рд╣рдо рджреЛ рдмрд╛рд░ рдЬрд╛рдБрдЪреЗрдВрдЧреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЕрдм рднреАред "

"рдирд╣реАрдВ, рдЕрдиреБрд░реЛрдз рд╕рдордп 1ms рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕реНрддрд░ o_0 рдкрд░ рд╣реИ"



рдПрдХ рдФрд░ рдЕрдЬреАрдм рдмрд╛рдд

 ALTER TABLE `test` MODIFY COLUMN `name2` varchar(10) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL AFTER `name1`;
      
      





рдирд┐рд╡реЗрджрди рднреЗрдЬрдирд╛

 SELECT IFNULL(name1, name2) FROM test;
      
      





рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛? 0_o рдпрд╣рд╛рдВ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдЧрд▓рддреА рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ! "



рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдмрдЧ рдпрд╛ рдлрд╝реАрдЪрд░ рдХреНрдпрд╛ рд╣реИ?



PS 5.0 рдФрд░ 5.1 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ред



All Articles