您的位置:首页 > 数据库 > MySQL

mysql不能插入汉字或者是pyspark连接mysql输出或输入时汉字存在乱码问题

2020-07-14 06:26 633 查看

首先,我的mysql版本为

用pyspark连接数据库进行输出某表的内容

[code]from pyspark.sql import SparkSession

if __name__ == "__main__":
"""
从mysql查询数据
"""
spark = SparkSession.builder.getOrCreate()

url="jdbc:mysql://192.168.1.105:3306/tylg?serverTimezone=Asia/Shanghai"
user="root"
password="123456"
# 下方如果用的是mysql-connector8.0的要用加cj,若是5.多则不用】
dirver="com.mysql.cj.jdbc.Driver"

#创建数据库连接,查询所有数据
mysql_df=spark.read.format("jdbc").option("url",url).option("dirver",dirver)\
.option("dbtable","customerinfo").option("user",user).option("password",password).load()
print(type(mysql_df))
mysql_df.show()

这种情况出现了乱码

付航那个是我修复好的,而下面那个的uname就是乱码

用pyspark连接数据库进行输入某表数据

[code]from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, Row

if __name__ == "__main__":
"""
从mysql查询数据
"""
spark = SparkSession.builder.getOrCreate()

# 定义要插入的数据
ls = ["NO11,谢,800000", "NO12,杨,100000", "NO13,首,120000", "NO14,玉,300000"]

# 将列表数据转换为rdd
customerinfo_rdd = spark.sparkContext.parallelize(ls).map(lambda x: x.split(","))

# 创建schema对象
schema=StructType\
(
[ StructField("num",StringType(),True),
StructField("uname",StringType(),True),
StructField("amount", StringType(), True)
]
)
# 构建行对象row
row_rdd = customerinfo_rdd.map(lambda x: Row(x[0].strip(), x[1].strip(), x[2].strip()))

# 将schema应用到rdd上,使用createDataFrame创建DataFrame
customerinfo_df = spark.createDataFrame(row_rdd, schema)

# customerinfo_df = customerinfo_rdd.map(lambda x: Row(num=x[0], uname=x[1], amount=x[2])).toDF()
# 等价于上面的createDataFrame(row_rdd, schema)

# 构建连接数据库的参数
database_conf = {}
database_conf["user"] = "root"
database_conf["password"] = "123456"
database_conf["dirver"] = "com.mysql.cj.jdbc.Driver"

customerinfo_df.write.jdbc("jdbc:mysql://192.168.1.105:3306/tylg?serverTimezone=Asia/Shanghai",
"customerinfo", "append", database_conf)

这种插入后显示下面的情况

英文能正常插入而中文显示???

后来使用

show variables like '%char%';命令查看mysql的字符编码如下

发现是mysql默认的Latin1编码,需要改成其他,刚开始改的是utf8,而使用命令

[code]SET character_set_client = 'utf8';
SET character_set_connection='utf8';
SET character_set_server = 'utf8';
SET character_set_results = 'utf8';

改了之后重启mysql有变成原来的样子,这时候发现要在配置文件中修改,在mysql安装文件的my.ini修改

打开后把下图的两个位置改成了utf8

但是还是不行,甚至出现了数据库插入的时候显示这种错误

后来把这两个位置改成了gbk

插入成功了

而且python上运行查看数据也成功了

而且运行插入数据也成功了

还有就是注意创建表的时候最后要加上字符码为utf8;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: