mysql大写表找不到的问题

本文详细解析了my.conf文件中lower_case_table_name参数的配置意义,包括其如何自动将所有语句转换为小写执行,以及如何处理原有大写的表名。同时强调了参数的使用注意事项。

在my.conf中

lower_case_table_name = 1

但是注意,原来已经有的大写表要删掉或者想办法改成小写,否则仍然找不到。

 

所以这个参数的意思是把所有的语句自动变成小写执行,而不是不区分大小写。

<think>好的,我现在需要帮助用户解决将MySQL迁移到达梦8数据库后,变成大写导致不到问题。首先,我需要理解用户的问题场景。用户之前使用MySQL,现在迁移到达梦8,但发现数据称变成了大写,导致应用程序不到,可能因为原来的SQL语句里是小写或者其他形式。 根据用户提供的引用,特别是引用[2],MySQL的lower_case_table_names参数控制的大小写敏感性。当设置为1时,会被存储为小写,并且不区分大小写。而达梦8可能默认处理的方式不同,导致迁移后变为大写,从而引发问题。 接下来,我需要回忆达梦数据库的相关知识。达梦8是基于Oracle的语法和习惯设计的,而Oracle默认是区分大小写的,但通常会以大写形式存储,除非使用双引号。这可能就是迁移后变成大写的原因。 用户需要的是在达梦8中配置类似MySQL的大小写不敏感处理,或者调整的大小写形式,使得应用程序能正确。可能的解决方案包括: 1. 配置达梦数据库的参数,使其对大小写不敏感。需要查看达梦是否有类似lower_case_table_names的参数,或者是否有其他配置方式。例如,达梦的COMPATIBLE_MODE参数可能支持兼容MySQL的模式,但需要确认具体版本是否支持。 2. 在迁移过程中,强制将转换为小写。比如在迁移工具或脚本中处理,或者在创建时使用双引号来保持小写,但达梦可能默认存储为大写,除非使用双引号。 3. 修改应用程序的SQL语句,统一使用大写,但这可能不太现实,尤其是如果应用已经有很多小写的引用。 根据引用[3],达梦迁移时可能遇到类似MySQL的CURRENT_TIMESTAMP问题,但这里的问题是关于大小写。因此,需要到达梦对应的配置项。 查资料后,达梦8中的默认是存储为大写,并且在查询时默认不区分大小写,但实际行为可能受参数影响。达梦有一个参数叫做CASE_SENSITIVE,默认设置为0,示不区分大小写。但需要确认该参数是否影响的存储和比较。另外,另一个参数LOWER_CASE_TABLE_NAMES可能也存在,或者是否有其他方式。 可能的解决方案步骤: - 确认达梦8中是否有类似lower_case_table_names的参数,或者是否有配置可以控制的大小写存储和比较。 - 如果存在这样的参数,修改配置文件(dm.ini),重启数据库,并重新导入数据,使以期望的形式存储。 - 如果达梦没有直接对应的参数,可能需要使用双引号来创建,强制保持小写,但这可能需要在迁移过程中处理DDL语句,添加双引号。 - 另外,检查达梦的兼容模式设置,是否设置为兼容MySQL,这可能会影响的大小写处理。 根据用户的问题,可能需要结合配置达梦的参数和在迁移过程中处理的大小写。例如,设置CASE_SENSITIVE=0,或者在迁移时使用工具将转换为小写,并确保SQL语句中的也使用小写。 需要验证这些步骤的正确性,可能需要参考达梦的官方文档或技术手册。例如,达梦的CASE_SENSITIVE参数默认是0,即不区分标识符的大小写,但在存储时标识符会被转换为大写。如果设置为1,则区分大小写,并且存储为原始形式。因此,如果用户希望区分大小写或者存储为小写,可能需要设置CASE_SENSITIVE=1,并在创建时使用双引号包裹小写的。 但用户希望的是迁移后不修改应用程序,即应用可能使用小写的来查询,而达梦中存储为大写,此时可能需要达梦在查询时不区分大小写。但根据默认的CASE_SENSITIVE=0,达梦在比较时会忽略大小写,所以即使存储为大写,使用小写查询也能到。但为什么用户会遇到不到问题呢? 可能的原因是在迁移过程中,被转换为了大写,而应用程序的SQL语句中使用了小写的,而达梦在默认情况下虽然不区分大小写,但实际存储的大写,而如果SQL语句中写的是小写,是否会被转换为大写进行比较? 例如,如果达梦的CASE_SENSITIVE=0,那么标识符在存储时会被转换为大写,而查询时无论输入大写还是小写都会被转换为大写进行比较,所以理论上即使应用使用小写,也能正确到。但用户的问题可能出在,迁移后的在达梦中实际存储为大写,而应用程序中的SQL语句可能使用了带引号的小写,或者在迁移过程中有其他配置问题。 或者,可能是达梦的兼容模式没有正确设置,导致处理的方式与MySQL不同。例如,达梦的COMPATIBLE_MODE参数设置为1可以兼容MySQL,这可能会影响标识符的大小写处理。 综上,解决方案可能包括: 1. 在达梦的配置文件dm.ini中设置CASE_SENSITIVE=0,确保标识符不区分大小写,并且存储为大写,但查询时不区分。 2. 设置COMPATIBLE_MODE=4(兼容MySQL模式),以处理大小写敏感性。 3. 在迁移过程中,使用迁移工具将MySQL转换为小写,并在达梦中使用双引号包裹,确保存储为小写,同时设置CASE_SENSITIVE=1,使得区分大小写,但应用查询时使用小写即可匹配。 4. 或者,修改应用程序中的SQL语句,统一使用大写。 需要进一步确认达梦的参数设置。例如,达梦的CASE_SENSITIVE参数控制的是标识符的存储和比较方式。当设置为0时,标识符不区分大小写,存储为大写;当设置为1时,区分大小写,存储为创建时的形式。因此,如果用户从MySQL迁移过来,且MySQL的lower_case_table_names=1,即存储为小写且不区分大小写,那么在达梦中可能需要将存储为小写,并设置CASE_SENSITIVE=0,但达梦默认存储为大写,因此可能需要使用双引号来创建小写的,并且设置CASE_SENSITIVE=1,但这可能反而导致需要区分大小写。 这似乎存在矛盾,因此可能需要另一种方法。例如,在迁移时,将所有的转换为小写,并使用双引号包裹,这样在达梦中,即使CASE_SENSITIVE=1,也会保持小写,而应用程序使用小写查询时,需要同样使用双引号或者正确的大小写,这可能不太方便。 或者,保持达梦的CASE_SENSITIVE=0,这样即使存储为大写,查询时使用小写也能匹配。但用户遇到的问题可能是在迁移时,被转换为了大写,而应用程序中的SQL语句可能因为某些原因无法正确匹配,例如使用了带引号的小写,导致达梦严格匹配。 因此,可能的解决方案是: - 在达梦的dm.ini中设置CASE_SENSITIVE=0,确保不区分大小写。 - 在迁移过程中,确保在达梦中存储为大写,这样应用程序无论使用大写还是小写都能匹配。 - 或者,修改迁移过程,将转换为小写,并使用双引号创建,同时设置CASE_SENSITIVE=1,但这需要应用也使用带引号的小写,这可能不现实。 需要更仔细地分析达梦的参数。根据达梦的文档,CASE_SENSITIVE参数设置为0时,系统不区分标识符的大小写,且存储为大写;设置为1时,区分大小写,存储为创建时的形式。因此,如果用户在迁移后变为大写,而应用程序使用小写查询,在CASE_SENSITIVE=0的情况下,应该可以正常访问,因为系统会将小写转换为大写进行比较。因此用户遇到的问题可能并非由CASE_SENSITIVE引起,而可能是其他原因,例如在迁移过程中被错误地转换,或者应用程序使用了带引号的,强制区分大小写。 或者,可能达梦在兼容MySQL模式下的处理方式不同,需要设置COMPATIBLE_MODE为MySQL模式。例如,达梦的COMPATIBLE_MODE参数可以设置为4,示兼容MySQL,这可能会影响标识符的处理方式。 因此,可能的配置步骤是: 1. 修改达梦数据库的配置文件dm.ini,设置以下参数: - COMPATIBLE_MODE = 4 # 兼容MySQL模式 - CASE_SENSITIVE = 0 # 不区分标识符大小写 2. 重启达梦数据库服务,使配置生效。 3. 重新迁移数据,确保按照MySQL的大小写规则处理,可能存储为小写或者不敏感。 此外,在迁移工具中,可能需要指定的大小写转换规则,例如在导出时转换为小写,或者使用达梦的迁移工具时配置相关选项。 总结,解决方案应包含配置达梦的参数以兼容MySQL的大小写处理方式,并在迁移过程中确保正确转换。同时,可能需要检查应用程序的SQL语句,避免使用带引号的导致大小写敏感。</think>### 达梦8数据库大小写敏感性问题解决方案 #### 问题原因分析 达梦8数据库默认采用类似Oracle的大小写处理机制: 1. **存储**:默认以大写形式存储(除非使用双引号包裹创建)[^3] 2. **大小写敏感**:默认通过参数$CASE\_SENSITIVE$控制,值为$0$时忽略大小写,值为$1$时严格区分大小写 MySQL迁移到达梦后自动转为大写,而应用程序仍使用小写访问,导致不到的错误。 --- #### 解决方案步骤 ##### 1. 配置达梦数据库参数 修改达梦安装目录下的`dm.ini`文件: ```ini CASE_SENSITIVE = 0 # 标识符不区分大小写 COMPATIBLE_MODE = 4 # 启用MySQL兼容模式 ``` *参数说明*: - $CASE\_SENSITIVE=0$:系统自动将标识符转为大写存储,查询时不区分大小写 - $COMPATIBLE\_MODE=4$:兼容MySQL的语法特性[^3] ##### 2. 重启数据库服务 ```bash systemctl restart DmService ``` ##### 3. 迁移数据时特殊处理 在数据迁移过程中添加额外处理: - **使用DTS迁移工具**:在达梦的"数据迁移工具"中设置转换规则,强制将转为小写 - **手动处理DDL语句**: ```sql CREATE TABLE "user_info" (...); -- 使用双引号包裹保持小写 ``` ##### 4. 验证配置效果 ```sql SELECT * FROM dba_objects WHERE object_name = 'USER_INFO'; -- 应能查询到 SELECT * FROM user_info; -- 使用小写应可正常访问 ``` --- #### 配置方案对比 | 方案 | 优点 | 缺点 | 适用场景 | |------|------|------|----------| | 修改CASE_SENSITIVE | 无需修改应用代码 | 所有强制大写存储 | 快速适配原有系统 | | 双引号创建 | 精确控制大小写 | 需修改所有DDL语句 | 新建系统开发 | | 迁移工具转换 | 保持原MySQL格式 | 增加迁移复杂度 | 大型系统迁移 | --- #### 注意事项 1. 参数修改后需**重新初始化数据库**才能生效 2. 已存在的需通过`ALTER TABLE`重命才能适配新规则 3. 达梦8.1.2.141以上版本对MySQL兼容性有显著改进 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值