mysql php UTF-8


mysql php UTF-8

这里有一个奇怪的问题:

我必须将CSV文件中的数据写入mysql DB(默认字符集UTF-8)

当我读取CSV并在终端上打印查询字符串时(出于调试目的),输出是正确的:

insert into orari (pv_id, day) values(5492, 'giovedì pomeriggio')

但是当我用mysql客户端运行select查询时,结果很奇怪:

*************************** 273. row ***************************
             id: 28856
             day: giovedì pomeriggio
             pv_id: 5760

如果我在phpmyadmin上运行查询也是一样的。

HTML输出是正确的,字符集被设置为UTF-8,并且像奥卢这样的字符被正确地可视化。

*编辑*这是我的mysql字符集和排序规则设置:

SHOW VARIABLES LIKE 'c%';
| character_set_client     | utf8                                                  |
| character_set_connection | utf8                                                  |
| character_set_database   | utf8                                                  |
| character_set_filesystem | binary                                                |
| character_set_results    | utf8                                                  |
| character_set_server     | utf8                                                  |
| character_set_system     | utf8                                                  |
| collation_connection     | utf8_general_ci                                       |
| collation_database       | utf8_general_ci                                       |
| collation_server         | utf8_general_ci                                       |

每个MySQL客户端在与服务器握手时都应该指定他们想要的字符集。除非覆盖,否则默认值为latin1

您可以在每个连接上发出以下查询来解决此问题:

SET NAMES 'utf8';

或者,您可以在MySQL字符集配置中进行设置,如MySQL手册中所述。

您说HTML和输入是正确的,但只有mysqlphpmyadmin是不正确的。您还需要为这些设置正确的连接字符集,因为它们默认为latin1,意思是"8位干净,每个字符一个字节"。

(这不应该影响您的问题,但您应该确保您的表或列指定utf-8存储。)

您会注意到您的垃圾输出是两个字节,这意味着存储在DB中的肯定是UTF8。您的数据在输出时被误解了。

对于mysql终端程序,使用--default-character-set参数启动它。确保它与终端的字符集相匹配。

我不知道phpMyAdmin是如何设置的,但也应该有一个连接字符集的设置。