无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)
当创建表时,我已经设置了charset = utf8。
我创建了1个存储过程来将数据插入数据库。
将数据UTF8插入到窗口上的数据库时,它可以正常工作。(正确显示数据)
但它在Linux中不起作用。(显示数据不正确)
奇怪的是在窗口中插入UTF8 工作正常 ,但是当我在linux中部署MySQL时,在向数据库插入数据时会插入错误的UTF8值。
感谢帮助
编辑:更新更多详细信息请关注@Col的评论。 弹片
When create table, I have setted charset = utf8.
I create 1 store procedure to insert data to database.
When insert data UTF8 to Database on Window, it works OK.(Display data correctly)
But it doesnot work in Linux.(Display data not correctly)
The strange thing is insert UTF8 work fine in window, but when i deploy MySQL in linux, when insert data to database it insert wrong UTF8 value.
Thanks for help
Edit: Update more detail follow comment of @Col. Shrapnel
原文:https://stackoverflow.com/questions/2629909
更新时间:2019-12-16 01:18
最满意答案
你应该用--default-character-set = utf8启动mysql控制台:
mysql --default-character-set=utf8 -uyour_user -p
I just found a solution for my problem: Edit file my.cnf under /etc/my.cnf as below:
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8
But i still confuse why this bug occur in Linux, not in Window.
2010-04-13
相关问答
目前的形式,这个问题是不可能回答的。 我们猜测...... 您正在使用MySQL LOAD DATA语句。 您已经验证.csv文件的字符集编码不是 ucs2 。 您已经验证.csv文件的字符集编码是utf8 (即匹配character_set_database系统变量),您已在LOAD DATA语句的CHARACTER SET子句中指定了相应的字符集。 除此之外,还有一大堆其他可能是错误的东西,但我们仍然只是在猜测。 当MySQL“悲惨地失败”时,经常出现某种迹象,如错误消息,或者我们可以观察和描
...
请注意,使用fgetcsv()函数读取数据时,会考虑locale设置。 如果LANG是例如en_US.UTF-8 ,则使用此函数读取单字节编码的文件。 您可以尝试另一件事 - 即时转换您的.csv文档(使用您的文件编码更改UCS-2 ): function parse_csv($filename) {
if (($handle != fopen($filename, "r"))) return false;
while (($cols = fgetcsv($handle, 1000
...
我在网上搜索了好几个小时,然后找到了我想为其他人分享的解决方案: 在数据库字段中使用BLOB而不是text / varchar。 像这样,您可以像以前一样继续使用数据库表,并且Emojis显示正确。 一旦主机更新MySQL版本,我将继续使用UTF8MB4作为编码。 I have searched the web for many hours and I came to this solution which I want to share for other people: Use BLOB in
...
你应该用--default-character-set = utf8启动mysql控制台: mysql --default-character-set=utf8 -uyour_user -p
I just found a solution for my problem: Edit file my.cnf under /etc/my.cnf as below: [mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
...
Csv可以是UTF-8,但你的文件将是一些windows- *编码(或ISO *)。 简单的方法是将数据转换为UTF-8。 使用iconv函数执行此任务。 echo $query="INSERT INTO csv_data(name,phone,city) values('". iconv('cp1250', 'utf-8', $data[0]) ."','". iconv('cp1250', 'utf-8', $data[1]) ."','". iconv('cp1250', 'utf-8',
...
我会在黑暗中采取非常狂野的刺: phpMyAdmin实际上是正确的。 不起作用的是您的自定义界面,因为它没有正确设置连接编码 。 因此,您通过它插入的所有数据都会混淆在数据库中,但恰好在您的应用程序中有一个干净的往返。 phpMyAdmin插入实际的 UTF-8数据,这些数据在通过错误连接检索时会混乱。 一直查看UTF-8并在Web应用程序中处理Unicode前后 。 I'll just take a very wild stab into the dark: phpMyAdmin actuall
...
正如Mihai所说,我不得不移除utf8_encode()函数,这个函数将字符集搞乱了。 去除后,它的工作顺利,应该。 As Mihai said, I had to remove the utf8_encode() function, which messed the charset up. After removing it, it works as smooth as it should.
使用unidecode将unicode数据转换为ASCII文本。 import unidecode
name = unidecode.unidecode_expect_nonascii(name)
Use unidecode to convert unicode data to ASCII text. import unidecode
name = unidecode.unidecode_expect_nonascii(name)
正如@Yu Zhang建议的那样,我读了这个链接的讨论,我发现我应该设置一个环境变量NLS_LANG ,以便与数据库建立UTF-8连接。 所以我在测试设置中添加了以下行: os.environ["NLS_LANG"] = "AMERICAN_AMERICA.AL32UTF8"
As @Yu Zhang suggested, I read discussion in this link and I found out that I should set an environment variabl
...