我正在尝试以下无法正常工作:
update table_name set text_column= load_file('C:\temp\texttoinset.txt') where primary_key=5;
此处text_column的类型为TEXT。
这给出了:
Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. Rows matched: 1 Changed: 0 Warnings: 1
从PHP中在SQL中插入日志文件内容的正确方法是什么?
答案 0 :(得分:0)
这可能与此问题重复:https://serverfault.com/questions/316691/mysql-binlog-format-dilemma
无论如何,关键是语句是不安全的,因为它使用的系统函数可能会在从属服务器上返回不同的值。
当MySQL数据库设置为使用复制时,load_file
等系统功能可能会导致问题。主服务器和从服务器之间的文件C:\temp\texttoinset.txt
可能不同(或者甚至可能不存在于其中一个服务器上)。
使用复制时,最好避免使用系统功能(如load_file
和NOW()
),因为在不同服务器上执行时值会有所不同。如果要将文件加载到使用复制的MySQL数据库中,请考虑使用PHP的file_get_contents来读取该文件,然后使用该文件将其插入到数据库中。
作为旁注,我不知道您为什么要尝试将日志文件插入MySQL,尤其是作为单个TEXT列。可能有更好的方法来做你想做的事。