我使用的是Apache Airflow,这是我的PythonOperator中用于收集数据的函数。我的数据有阿拉伯字符串。现在,当我在不将字符设置为utf8的情况下执行查询时,我会得到"????"&";。所以我在下面做了这个设置。但问题仍然没有解决,我到了最后";
在阿拉伯语中,它应该是";مح;
query = "select * from test_sample limit 1;"
source_hook = MySqlHook(mysql_conn_id='mysql_conn', schema='mysql')
source_conn = source_hook.get_conn()
source_cursor = source_conn.cursor()
source_cursor.execute("SET NAMES utf8;")
source_cursor.execute("SET CHARACTER SET utf8;")
source_cursor.execute("SET character_set_connection=utf8;")
source_cursor.execute(query)
columns = [col[0] for col in source_cursor.description]
records_data = [dict(zip(columns, row)) for row in source_cursor.fetchall()]
record = records_data[0]
test_a = record['name']
print(test_a)
当你粘贴ÙØÙد اÙÙاجرÙ
时,你可以在这里查看这个链接,你可以看到محمد الهاجرى
上面的阿拉伯语输出。但我无法在代码中获取它。有什么想法吗?
我创建了我的表格如下:
CREATE TABLE IF NOT EXISTS `test_sample` (
`ID` int(10) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
感谢Rick和大家的回复
我将在这里发布我如何解决我的问题:
在深入研究了实际上没有必要的问题之后,因为答案一直摆在我面前,哈哈。由于我使用的是Apache Airflow,而我错过添加的连接配置是在extra{"charset":"utf8"}
中。确实解决了!这是参考资料(https://airflow.apache.org/docs/apache-airflow-providers-mysql/stable/connections/mysql.html)
此外,我的mysql.cnf配置被设置为-不确定它是否会有任何不同,尽管-为:
[client]
default-character-set = utf8mb4
[mysqld]
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init-connect = SET NAMES utf8mb4
[mysql]
default-character-set = utf8mb4
同样适用于表格:
CREATE TABLE IF NOT EXISTS `test_sample` (
`ID` int(10) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
我删除了MySqlHook中所有不再需要的连接代码:
source_cursor.execute("SET NAMES utf8;")
source_cursor.execute("SET CHARACTER SET utf8;")
source_cursor.execute("SET character_set_connection=utf8;")
希望它也能帮助其他人,干杯!