[Dbix-class] Unexpected duplicate-key error from find_or_create
Ash Berlin
ash_cpan at firemirror.com
Sun Oct 12 02:49:57 BST 2008
On 11 Oct 2008, at 22:43, Lee Goddard wrote:
> I do not often find myself using DBIx::Class, so please forgive any
> naivety or silliness in my question, but I would appreciate your help.
>
> my $o = $schema->resultset( $field )->find_or_create(
> value => $val
> );
>
> The above code has been working well over a variety of data, until
> just now, when it died with the following words (where `331_chrs`
> represents a string of 331 characters):
>
> SELECT me.id, me.value FROM licence me WHERE ( ( me.value = ? ) ):
> '331_chrs'
> INSERT INTO licence (value) VALUES (?): '331_chrs'
> DBIx::Class::ResultSet::find_or_create():
> DBI Exception:
> DBD::mysql::st execute failed:
> Duplicate entry '%s' for key 2
> [for Statement "INSERT INTO licence (value) VALUES (?)"] at ...
>
> I have not yet taken to reading the source code, because I this is
> the one error I had hoped to avoid by using find_or_create.
>
> The MySQL table in question has only two columns, one PRIMARY and
> one UNIQUE, and I'm developing with the fantastic
> DBIx::Class::Schema::Loader.
>
> Have you seen such behaviour before? I am making a common error?
> Have I misconstrued something in the manual? Should I be reading the
> source? Could this be DBIx::Class::Schema::Loader...?
>
> Thanks in anticipation of any pointers,
> Lee
What version of MySQL Server are you talking to? Some versions play
silly buggers with indexs on varchar columns. Try running the same
commands on mysql console.
-ash
More information about the DBIx-Class
mailing list