Ubuntu下mysql数据库插入中文出现乱码的解决方法

在Ubuntu上安装mysql后,插入中文数据时遇到乱码问题。通过查看mysql的字符集设置,发现server和database默认为latin1。为统一为UTF-8,需修改配置文件`/etc/mysql/my.cnf`,在`[client]`和`[mysqld]`部分添加相关UTF-8设置。重启mysql服务后,中文插入正常,问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博主由于是做服务器开发的,就打算自学mysql数据库。因此就在shell端安装mysql

安装命令:sudo apt-get install mysql-server mysql-client

sudo apt-get install php5-mysql

安装之后进行插入中文操作的时候出现

  1. mysql> select * from worker;  
  2. +----+------+----------------+------+  
  3. | id | name | address        |level |  
  4. +----+------+----------------+------+  
  5. |  1 | ??   | ?????????????  |    0 |  
  6. |  2 | ???  | ?????????????? |    1 |  
  7. |  3 | jack | shanghai       |    1 |   
  8. +----+------+----------------+------+ 
我在网上找了很多的解决办法,但是按照步骤该之后,造成的后果mysql总是启动失败,没办法每次之后卸载重新安装。经过我的多次尝试,终于找到了解决方法。


下面进入正题

1、首先确定server、数据库和表的默认字符级

  1. mysql> show variables like 'character_set_%';  
  2. +--------------------------+----------------------------+  
  3. | Variable_name            | Value                      |  
  4. +--------------------------+----------------------------+  
  5. | character_set_client     | latin1                     |  
  6. | character_set_connection | latin1                     |  
  7. | character_set_database   | latin1                     |  
  8. | character_set_filesystem | binary                     |  
  9. | character_set_results    | latin1                     |  
  10. | character_set_server     | latin1                     |  
  11. | character_set_system     | utf8                       |  
  12. | character_sets_dir       | /usr/share/mysql/charsets/ |  
  13. +--------------------------+----------------------------+  
  14. rows in set (0.00 sec)  


2、通过上面的查询结果,我们知道server和database默认字符集为拉丁文latin1,表毫无疑问是采用server字符集作为默认字符集。这样就导致了,我们通过sql脚本插入中文时乱码的问题。由于我们代码中统一采用了UTF-8作为工程的默认字符集编码,为了统一,我们这里需要将字符集修改为UTF-8。

3、

修改mysql的配置文件

    sudo vi /etc/mysql/my.cnf

    在[client]的下方加入如下语句:

    no-auto-rehash
    default-character-set=utf8 

    在[mysqld]下加入

    socket        = /var/run/mysqld/mysqld.sock
    port        = 3306
    character-set-server=utf8 等内容,自行对比,有的就不用加了,一般只需要加入 character-set-server=utf8.

这时候shell 进入mysql,执行mysql>:show variables like 'character%' , 结果如图:


4、最后重新启动mysql,重启命令:sudo /etc/init.d/mysql restart,然后再进行插入中文操作,问题完美解决

mysql> select * from worker;
+------+------+--------------+--------+-------+
| id   | name | address      | salary | level |
+------+------+--------------+--------+-------+
|  100 | tomo | 上海         |   3000 |     0 |
|  101 | jack | 浦东新区     |   6000 |     1 |
|  102 | jack | 徐汇区       |   6000 |     1 |
+------+------+--------------+--------+-------+


<think>好的,用户的问题是在Ubuntu系统上使用Spark将数据写入MySQL数据库。我需要根据用户提供的引用和系统指令来构建回答。首先,用户提供的引用中有几个相关的,比如引用[1]提到安装MySQL和创建数据库,引用[3]是关于Spark写入MySQL时的问题解决方案,引用[4]提到了数据存储到数据库方法。 首先,我应该分步骤说明整个过程。用户可能需要从环境准备开始,包括安装必要的组件,比如Java、Spark、MySQL和连接器。然后,创建测试用的数据库和表,这部分可以参考引用[1]中的示例,数据库名spark,表名student。接下来,配置Spark应用程序,需要添加MySQL的JDBC驱动,这里引用[3]提到驱动版本和URL的问题,需要确保驱动正确。 然后,编写Spark代码,这部分需要示例代码,使用DataFrame API,设置连接属性,如URL、用户、密码,还要注意字符集,引用[3]中的配置可能需要调整my.cnf文件,所以需要提醒用户修改MySQL的字符集设置以避免乱码。 接下来是提交任务,用户可能需要知道如何通过spark-submit来运行程序,并且确保驱动包被正确引用。常见问题部分,可以包括驱动问题、字符集、权限问题,参考引用[3]中的解决方案,比如修改my.ini中的字符设置,但Ubuntu下应该是my.cnf,需要指出正确的路径。 相关问题部分,用户可能还想了解性能优化、其他数据库连接方式,以及数据同步方法,比如使用Flink,如引用[2]中的例子,或者定时任务如引用[4]提到的Python脚本。这些可以作为相关问题提出。 需要确保所有数学公式和代码块符合格式要求,使用$...$和$$...$$,但在这个回答中可能数学公式不多,主要是代码块。检查LaTeX语法是否正确,比如在需要的地方使用正确的符号。最后,引用标识要自然地添加在对应的位置,比如在提到创建数据库时引用[1],字符集问题引用[3]。</think>### 分步解决方案:在Ubuntu上使用Spark将数据写入MySQL数据库 #### 1. 环境准备 - **安装MySQL** 参考厦门大学数据库实验室教程安装MySQL[^1]: ```bash sudo apt update sudo apt install mysql-server sudo mysql_secure_installation ``` - **创建数据库和表** 登录MySQL并执行: ```sql CREATE DATABASE spark; USE spark; CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50), score FLOAT ); ``` - **安装Spark与依赖** 确保已安装Java 8+和Spark,并添加MySQL JDBC驱动: ```bash wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.28.tar.gz tar -zxvf mysql-connector-java-8.0.28.tar.gz cp mysql-connector-java-8.0.28/mysql-connector-java-8.0.28.jar $SPARK_HOME/jars/ ``` #### 2. 配置Spark应用 ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("SparkToMySQL") \ .config("spark.jars", "/path/to/mysql-connector-java-8.0.28.jar") \ .getOrCreate() # 示例数据 data = [(1, "Alice", 89.5), (2, "Bob", 92.0)] df = spark.createDataFrame(data, ["id", "name", "score"]) # 写入MySQL df.write.format("jdbc") \ .option("url", "jdbc:mysql://localhost:3306/spark?useUnicode=true&characterEncoding=utf8") \ .option("dbtable", "student") \ .option("user", "root") \ .option("password", "your_mysql_password") \ .mode("append") \ .save() ``` #### 3. 解决常见问题 - **字符集配置** 修改MySQL配置文件`/etc/mysql/my.cnf`,添加以下内容[^3]: ```ini [mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4 ``` 重启MySQL服务: ```bash sudo systemctl restart mysql ``` - **权限问题** 确保MySQL用户有远程/本地写入权限: ```sql GRANT ALL PRIVILEGES ON spark.* TO 'root'@'localhost' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` #### 4. 提交Spark任务 ```bash spark-submit --driver-class-path /path/to/mysql-connector-java-8.0.28.jar your_spark_script.py ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值