TYPO3:SQL错误:在第1行处的'sys_language_uid'列中,整数值不正确:''

10
我刚刚安装了TYPO3,但是当我尝试添加/保存内容时,出现以下错误信息:
SQL错误:“在第1行处的'sys_language_uid'列的整数值不正确:''”
5个回答

39

这种行为与使用严格模式的数据库管理系统有关,例如MySQL自5.7版本以来。禁用严格模式(如所接受的答案中提供的)只是一种解决方法。

真正的解决方法是通过修改相应字段定义的TCA(表配置数组)将值显式转换为整数。


2
请参阅更新文档中的注释 https://docs.typo3.org/typo3cms/TCAReference/ColumnsConfig/Type/Select.html#id20 - M Klein

8

在 Localconfiguration.php 文件中设置此项

[SYS][setDBinit] = SET SESSION sql_mode=''

无论如何,如果您想使用尚未设置默认字段值且因此不支持严格模式的扩展程序,则可能希望像在 /etc/mysql/my.cnf 中那样禁用严格模式:[mysqld]

禁用严格模式,因为某些Typo3扩展程序尚不支持它(需要TCA中字段的默认值)

默认值:ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

sql_mode=ONLY_FULL_GROUP_BY、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
- Jonas Eberle
从长远来看,禁用严格模式并不是一个好主意。对于较新的数据库服务器版本,这将成为默认设置。因此,当您更新或迁移系统到不同的数据库服务器时,可能会遇到问题。因此,虽然这可以是一个快速解决问题的方法,但您真的不应该长期这样做。您只是把问题推迟到以后。我建议在答案中添加一条注释以澄清这一点。 - Sybille Peters
这不是公共扩展程序开发人员的解决方案。你可以在私人项目中这样做,但你应该修复你的扩展程序。 - Naderio

1

在尝试了不同的方法后,我找到了解决方案:

mysql -u root -p -e "SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';" 

然后,您可以通过运行以下命令来验证模式是否已设置:

 mysql -u root -p -e "SELECT @@GLOBAL.sql_mode;"

你应该看到:

+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+

将数据库“变得不那么严格”并不是一个好的长期解决方案。 - Sybille Peters

0
在最新的TYPO3版本中,您需要在LocalConfiguration.php中添加此代码。
'setDBinit' => 'SET SESSION sql_mode = \'NO_ENGINE_SUBSTITUTION\';',

将数据库“变得不那么严格”并不是一个好的长期解决方案。 - Sybille Peters

-2

在Typo3 9.5/10.4中

如果您无法更改所使用的扩展程序的编程或更改mysql服务器的运行模式,则更改typo3连接的模式可能会很有用。 您可以简单地添加到您的LocalConfiguration.php。

[DB][Connections][Default][initCommands]='SET SESSION sql_mode = \'\';',

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接