Today, I'm going to help my colleagues with a SQL (Simplified) execution error:
 
 
  
   
   | The code is as follows |  | 
 
   
   | Mysql> Select Date_format (' 2013-11-19 ', ' y-m-d ') > Timediff (' 2013-11-19 ', ' 2013-11-20 '); | 
 
  
 
ERROR 1267 (HY000): illegal mix of collations (utf8_general_ci,coercible) and (latin1_swedish_ci,numeric) for operation ' & gt; '
 
At first glance it is very baffling, check the manual, found that there are such a paragraph:
 
The language used for day and month names and abbreviations are controlled by the value of the Lc_time_names system variabl E (section 9.7, "MySQL Server Locale Support").
 
The Date_format () returns a string with a character set and collation given by Character_set_connection and Collation_conn Ection So, it can return month and weekday names containing Non-ascii.
 
That is, the date_formate () function returns the result with the character set/checksum set attribute, while the Timediff () function does not have a character set/checksum set attribute, so let's verify:
 
 
  
   
   | The code is as follows |  | 
 
   
   |  Mysql> set names UTF8; Mysql> Select CharSet (date_format (' 2013-11-19 ', ' y-m-d ')), CharSet (' 2013-11-19 ', ' 2013-11-20 '));
 +--------------------------------------------+-----------------------------------------------+
 | CharSet ( Date_format (' 2013-11-19 ', ' y-m-d ') | CharSet (Timediff (' 2013-11-19 ', ' 2013-11-20 ') |
 +--------------------------------------------+-----------------------------------------------+
 | UTF8                                          | binary                                          |
 +--------------------------------------------+-----------------------------------------------+
  Mysql> set names gb2312; Mysql> Select CharSet (date_format (' 2013-11-19 ', ' y-m-d ')), CharSet (' 2013-11-19 ', ' 2013-11-20 '));
 +--------------------------------------------+-----------------------------------------------+
 | CharSet ( Date_format (' 2013-11-19 ', ' y-m-d ') | CharSet (Timediff (' 2013-11-19 ', ' 2013-11-20 ') |
 +--------------------------------------------+-----------------------------------------------+
 | gb2312                                       | binary                                          |
 +--------------------------------------------+-----------------------------------------------+
 | 
 
  
 
The 
 can see that the character set for the Date_format () function returns the result is different, as the character_set_connection, collation_connection values are modified through the SET NAMES. In this case, if you want to work correctly, you need to make a character set conversion of the result, for example: 
 
 
  
   
   | code is as follows | &nbs P; | 
 
   
   | mysql> Select Date_format (' 2013-11-19 ', ' y-m-d ') > convert (timedi FF (' 2013-11-19 ', ' 2013-11-20 ') using UTF8); +----------------------------------------------------------------------------------------------+
 | date_ Format (' 2013-11-19 ', ' y-m-d ') > Convert (Timediff (' 2013-11-19 ', ' 2013-11-20 ') using UTF8) |
 +----------------------------------------------------------------------------------------------+
 |                                                                                                 1 |
 +----------------------------------------------------------------------------------------------+
 | 
 
  
 
It's okay.
 
P.s,mysql version: 5.5.20-55-log percona Server (GPL), release rel24.1, Revision 217
 
Attached
 
The following is a description of the function's arguments:
 
%s,%s two-digit form of seconds (00, 01, ..., 59)
 
%i Two-digit form (00, 01, ..., 59)
 
%H two digits in the form of hours, 24 hours (00,01, ..., 23)
 
%h,%I Two digits in the form of hours, 12 hours (01,02, ..., 12)
 
%k digital form of hours, 24 hours (0,1, ..., 23)
 
%l digital form of hours, 12 hours (1, 2, ..., 12)
 
%T 24-hour time form (hh:mm:s s)
 
%r 12-hour time form (Hh:mm:ss AM or Hh:mm:ss PM)
 
%p AM or P M
 
%w the name of each day of the week (Sunday, Monday, ..., Saturday)
 
%a the name of each day of the week (Sun, Mon, ..., Sat)
 
%d two digits indicates the number of days in the month (00, 01, ..., 31)
 
%e numeric form represents days of the month (1, 2, ..., 31)
 
%d The English suffix indicates the number of days in the month (1st, 2nd, 3rd, ...)
 
%w represents the number of days in the week (0 = Sunday, 1=monday, ..., 6=saturday)
 
%j a three-digit number of days in the year (001, 002, ..., 366)
 
% U Week (0, 1, 52), where Sunday is the first day of the week
 
%u weeks (0, 1, 52), where Monday is the first day of the week
 
%m month name (January, February, ..., December)
 
%b Abbreviated month name (January, February, ..., December)
 
%m two digits of the month (01, 02, ..., 12)
 
The month (1, 2, ..., 12) that is represented by the%c number.
 
%Y four digits of year
 
%y two digits of year
 
Percent% direct value "%"