[英]mysql php UTF-8
这里有一个奇怪的问题:
我必须将数据从CSV文件写入mysql数据库(默认字符集UTF-8)
当我读取CSV并在终端上打印查询字符串(用于调试目的)时,输出是正确的:
insert into orari (pv_id, day) values(5492, 'giovedì pomeriggio')
但是当我使用mysql客户端运行选择查询时,结果很奇怪:
*************************** 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和输入是正确的,但只有mysql
和phpmyadmin
是不正确的。 你需要为这些设置正确的连接字符集,因为它们默认为latin1
,这意味着“8位清理,每个字符一个字节”。
(这不应该影响您的问题,但您应该确保您的表或列指定utf-8存储。)
您会注意到您的垃圾输出是两个字节,这意味着存储在数据库中的内容肯定是UTF8。 您的数据在输出时被误解释。
对于mysql
终端程序,使用--default-character-set
参数启动它。 确保它与终端的字符集匹配。
我不知道如何使用phpMyAdmin设置它,但是也应该有连接字符集的设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.