What is the difference between i686 and x86_64 packages?

Technically, i686 is actually a 32-bit instruction set (part of the x86 family line), while x86_64 is a 64-bit instruction set (also referred to as amd64).

From the sound of it, you have a 64-bit machine that has 32-bit libraries for backwards compatibility. That should be totally fine.

i686 packages are intended to be executed on 686-compatible processors, which includes all Intel 32-bit x86 processors up to and including the Pentium 4, etc. as well as processors from AMD (AMD K6) and other vendors which make compatible 32-bit chips.

For more information:

  • AMD K6 series
  • Intel i686

x86_64 packages are intended to be executed on processors which are compatible with the AMD64 64-bit platform, including the AMD Athlon 64, AMD Opteron and related AMD processor families, and the Intel 64 based processors.

These 64-bit processors are fully backward compatible with their 32-bit predecessors, so if you have a AMD64 or Intel 64 processor, it's up to you whether to install the 64-bit x86_64 packages or the 32-bit i686 packages. To get the highest level of performance out of your system you may want to use the 64-bit x86_64 distribution packages.

Reference :

  • Microprocessor Types and Specifications

If you dig i686 in Wikipedia, Wikipedia will tell you clues that the i686 microarchitecture is considered as a x86 extension.

In general all x86 architectures are considered similar, and the x86_64 (or maybe amd64) architecture is considered in another microarchitectures group.