如何使用JDBC数据源将字符设置为写入MySQL表



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

在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()

使用createTableOptions选项,例如option("createTableOptions","CHARACTER SET utf8")

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

createTableOptions 这是JDBC Writer相关的选项。如果指定,此选项允许在创建表格时设置数据库特定的表和分区选项(例如,创建表T(name string)引擎= innodb。)。此选项仅适用于写作。

实际上该字符由您访问MySQL数据库确定。因此,最好的方法是在JDBC URL中设置Charset:

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

也有类似的问题,我必须介绍两个主要更改:

  1. JDBC URL必须包含这2个:&useUnicode=true&characterEncoding=UTF-8
  2. @jaceklaskowski提到的createTableOptions属性,即:.option("createTableOptions", "ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_unicode_ci"

我尝试过有和没有上述某些组合的不同组合,只使用适当的URL和可以将日语字符插入MySQL DB中的选项。我也在使用此驱动程序.option("driver", "com.mysql.jdbc.Driver"),因为首先在没有此属性的情况下尝试时。

我的数据库具有另一个字符集,因此请注意,此配置仅为您的表更改。

火花版本为2.4。

相关内容

  • 没有找到相关文章

最新更新