create database user default charset=utf8 collate=utf8_general_ci; 如果collate不加default好像解析有问题,与前面的options一起解析成SQLBinaryOpExpr了 druid-1.1.23版本 https://dev.mysql.com/doc/refman/8.0/en/create-table.html
原提问者GitHub用户ljq132008
就是Druid在解析SQL时,并不能正确处理CREATE TABLE语句中的table_option部分。
因为Druid底层使用的JsqlParser不支持这些table_option内容。
即便支持CREATE TABLE命令语法,但对于表选项仍然不完整。这导致Druid无法正确解析包含这些table_option的CREATE TABLE语句。
根据你提供的信息,使用Druid解析器在处理MySQL的CREATE DATABASE语句时可能会出现问题。具体地说,当在CREATE DATABASE语句中指定collate时,解析器可能将其与前面的options一起解析为SQLBinaryOpExpr表达式,而不是正确地解析为collate子句。
这可能是Druid解析器在某些情况下无法正确处理CREATE DATABASE语句中的collate子句的一个已知问题。通常,collate子句用于指定数据库的字符集和校对规则。
问题已修复,请用新版本
https://github.com/alibaba/druid/releases/tag/1.2.5
原回答者GitHub用户wenshao
根据您提供的信息,您想创建一个名为"user"的数据库,并设置默认字符集为utf8,排序规则为utf8_general_ci。然而,如果不使用"default"关键字来指定collate参数,默认的解析方式可能会导致问题。
在MySQL 8.0的官方文档中,我们可以找到CREATE TABLE语句的语法定义。根据文档,我们可以使用以下语法来创建数据库并设置默认字符集和排序规则:
CREATE DATABASE `user`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
请注意,上述语句是用于创建数据库而不是表。如果您要创建包含特定字符集和排序规则的表,请使用类似的语法:
CREATE TABLE `table_name`
(
-- 列定义
)
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;
以上代码将创建一个名为"table_name"的表,并将其默认字符集设置为utf8,排序规则设置为utf8_general_ci。
希望这些信息对您有所帮助!如果您还有其他问题,请随时提问。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。