MySQL中文的问号之谜(mysql中文是问号)

MySQL中文的问号之谜是一个经常给开发者带来困惑的问题。当SQL语句中使用中文时,由于MySQL的字符集和编码问题,常常会显示出一个问号(?)而不是中文字符,这一现象有时会引发开发者们的恼怒。

最初,这个问题是由于MySQL使用的字符集和编码不统一,或者是应用程序和MySQL之间编码之间不匹配带来的。解决之道很简单:在MySQL引擎中修改字符集名称和编码即可。

例如,如果我们要在MySQL中使用中文,编码修改为utf8,执行如下SQL语句:

CREATE DATABASE my_database CHARACTER SET utf8; 
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;
ALTER DATABASE my_database DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

这样,就会正确显示出中文字符,而不再显示问号(?)了。

但是,有时候即使应用程序和MySQL之间编码保持统一了,依然不能显示正确的中文字符。这是因为MySQL本身存在一定的bug,即有时如果中文字符被存储时,MySQL不能正确识别中文字符及其字面量,而是显示一个问号(?),这也是MySQL中文的问号之谜的由来。

当发现MySQL本身的bug时,最好的做法是升级MySQL到最新的版本,这样MySQL 本身的bug就得到了解决。不过如果不能升级MySQL,也可以手动将中文转换成UTF8编码,然后再由MySQL处理:

SELECT    CAST(CONVERT(column CHAR CHARACTER SET latin1 USING utf8) AS BINARY);

上述SQL语句中,latain1指明使用latain1编码保存中文,然后使用utf8编码进行转换,最后再把utf8编码返回给MySQL引擎。

总之,MySQL中文的问号之谜是由于MySQL字符集和编码出现问题导致,可以通过编码修改和sql语句转换来解决这个问题,最好的解决办法就是升级MySQL到最新版本,以此解决MySQL本身的bug。


数据运维技术 » MySQL中文的问号之谜(mysql中文是问号)