当前位置: 首页 > 知识库问答 >
问题:

如何使用JDBC数据源设置写入MySQL表的字符集?

於彬
2023-03-14

我使用Spark JDBC将数据摄取到Mysql表中。如果表不存在,它也会创建一个表。许多文本都有特殊字符。如果遇到任何特殊的食物,摄入就会失败。我通过在MySQL表中手动设置字符集utf8解决了这个问题。

是否可以在Spark JDBC中创建表时设置CHARACTER SET utf8

我使用DataFrames保存数据到MySQL。

df.write
  .format("jdbc")
  .option("url", "jdbc:mysql://localhost")
  .option("dbtable", "spark.tweet")
  .option("user", "root")
  .option("password", "root")
  .mode(SaveMode.Append)
  .save()

共有3个答案

钱弘壮
2023-03-14

我也遇到过类似的问题,我必须介绍两个主要的变化:

  1. jdbc url必须包含以下2条:

我尝试了不同的组合,包括上面提到的和没有提到的,并且只使用正确的url和选项,我就可以在MySql数据库中插入我的日语字符。我也在使用这个驱动程序。选项(“driver”、“com.mysql.jdbc.driver”),因为我第一次尝试不使用这个属性时,它抱怨。

我的数据库有另一个字符集,所以请记住,此配置只会更改您的表。

火花版是2.4。

冯泓
2023-03-14

实际上,字符集是由您对MySQL数据库的访问决定的。因此,最好的方法是在jdbc url中设置字符集,如下所示:

jdbc:mysql://${jdbcHostname}:${jdbcPort}/${jdbcDatabase}?user=${jdbcUsername}&password=${jdbcPassword}&useUnicode=true&characterEncoding=UTF-8
刘野
2023-03-14

使用createTableOptions选项,例如选项(“createTableOptions”,“字符集utf8”)

引用https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html:

createTableOptions这是一个与JDBC编写器相关的选项。如果指定,此选项允许在创建表时设置特定于数据库的表和分区选项(例如,CREATE TABLE t(名称字符串)ENGINE=InnoDB。)。此选项仅适用于书写。

 类似资料:
  • 我的变更集如下所示 我已经使用插件将liquibase与集成在一起 当我运行时,它会创建表,类似于

  • 问题内容: 这个问题的目的是记录: 在PySpark中使用JDBC连接读取和写入数据所需的步骤 JDBC源可能存在的问题以及已知的解决方案 只要稍作更改,这些方法就可以与其他支持的语言一起使用,包括Scala和R。 问题答案: 写数据 提交应用程序或启动Shell时,包括适用的JDBC驱动程序。您可以使用例如: 或结合和 也可以在启动JVM实例之前使用环境变量来设置这些属性,或使用set或/来设置

  • 这个问题的目的是记录: > 在PySpark中使用JDBC连接读写数据所需的步骤 JDBC源代码和已知解决方案可能存在的问题 只要稍作改动,这些方法就可以与其他受支持的语言(包括Scala和R)一起使用。

  • 在开发中,我使用下面的配置连接到MySQL数据库。我喜欢使用Tomcat数据源进行MySql连接。在Micronaut文档页面中没有找到示例。

  • 问题内容: 我正在尝试将HikariCP与Spring一起用于连接池。我正在使用jdbcTempLate和JdbcdaoSupport。 这是我用于数据源的spring配置文件: 但不幸的是,正在生成以下错误消息: 谁能告诉我如何解决这个问题? 问题答案: 你需要在bean配置上编写此结构(这是你的数据源): 这是我的示例,正​​在运行。你只需要将属性放在hibernate.properties上

  • 问题内容: 我想使用Spring和Hibernate写入一个MySQL主数据库,并从基于云的Java Web应用程序中再读取一个复制的从数据库。 我找不到对应用程序代码透明的解决方案。我真的不需要更改我的DAO来管理不同的SessionFactories,因为这看起来确实很麻烦,并将代码与特定的服务器体系结构结合在一起。 有什么办法告诉Hibernate自动将CREATE / UPDATE查询路由