我如何处理 MySQL 中的非拉丁字符(即来自我们的屋顶)?
How do I handle non-latin characters (i.e. С крыш наших домов) in MySQL?
我正在使用 mysql-connector-python
库连接并写入 MySQL 5.7 db。我已将编码设置为 utf8mb4
和 cursor.execute('SET CHARACTERS SET utf8mb4')
,甚至将其包含在我的连接设置中:
import mysql.connector
from mysql.connector import Error
sg_titles_db_settings = {
'user': <user>,
'password': <password>,
'host': <host>,
'port': <port>,
'database': <db>,
'charset': 'utf8'
}
def get_mysql_connection():
try:
db_connection = mysql.connector.connect(**sg_titles_db_settings)
return db_connection
except Error as e:
print("Error: ", e)
return False
但是任何非拉丁字母(非英文字母),例如任何东欧字母字符或特殊符号(例如♬
),都将插入为?
。
如果我不更改编码,这是我收到的错误:
1366 (HY000): Incorrect string value: '\xD0\x9E\xD1\x82\xD0\xB2...' for column...
我不明白我需要做什么才能解决这个问题。我偶然发现的每篇文章似乎都没有帮助。
提前致谢!
很奇怪它对你不起作用。我有一个西里尔文为我工作的项目,我有大致类似的东西:
import MySQLdb
db = MySQLdb.connect(host='', user='', passwd='', db='', use_unicode=True)
cur = db.cursor()
cur.execute('SET NAMES utf8mb4')
cur.execute("SET CHARACTER SET utf8mb4")
cur.execute("SET character_set_connection=utf8mb4")
# Actual database stuff goes here
db.commit()
cur.close()
db.close()
我注意到您使用的模块与我通常使用的模块不同。您是否尝试过其他 mysql 模块,例如 MySQLdb?
在 MySQL 服务器 运行 这个命令 SET character_set_results=utf8;
中,应该可以修复它。但是,关闭服务器可能不会保留该更改。
我正在使用 docker,但它不会持续存在。保留编码更改的唯一方法是将其包含在 docker-compose.yml
文件中:
services:
<db name>:
environment:
LANG: C.UTF-8
我正在使用 mysql-connector-python
库连接并写入 MySQL 5.7 db。我已将编码设置为 utf8mb4
和 cursor.execute('SET CHARACTERS SET utf8mb4')
,甚至将其包含在我的连接设置中:
import mysql.connector
from mysql.connector import Error
sg_titles_db_settings = {
'user': <user>,
'password': <password>,
'host': <host>,
'port': <port>,
'database': <db>,
'charset': 'utf8'
}
def get_mysql_connection():
try:
db_connection = mysql.connector.connect(**sg_titles_db_settings)
return db_connection
except Error as e:
print("Error: ", e)
return False
但是任何非拉丁字母(非英文字母),例如任何东欧字母字符或特殊符号(例如♬
),都将插入为?
。
如果我不更改编码,这是我收到的错误:
1366 (HY000): Incorrect string value: '\xD0\x9E\xD1\x82\xD0\xB2...' for column...
我不明白我需要做什么才能解决这个问题。我偶然发现的每篇文章似乎都没有帮助。
提前致谢!
很奇怪它对你不起作用。我有一个西里尔文为我工作的项目,我有大致类似的东西:
import MySQLdb
db = MySQLdb.connect(host='', user='', passwd='', db='', use_unicode=True)
cur = db.cursor()
cur.execute('SET NAMES utf8mb4')
cur.execute("SET CHARACTER SET utf8mb4")
cur.execute("SET character_set_connection=utf8mb4")
# Actual database stuff goes here
db.commit()
cur.close()
db.close()
我注意到您使用的模块与我通常使用的模块不同。您是否尝试过其他 mysql 模块,例如 MySQLdb?
在 MySQL 服务器 运行 这个命令 SET character_set_results=utf8;
中,应该可以修复它。但是,关闭服务器可能不会保留该更改。
我正在使用 docker,但它不会持续存在。保留编码更改的唯一方法是将其包含在 docker-compose.yml
文件中:
services:
<db name>:
environment:
LANG: C.UTF-8