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

落花浮王杯 提交于 2020-02-23 18:33:43

首先,我的mysql版本为

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

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连接数据库进行输入某表数据

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,而使用命令

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;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!